iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 26
1
Mobile Development

從0開始,全方面自動化測試Android App系列 第 26

[Day 26] 利用Appium測試Android App (一)

  • 分享至 

  • xImage
  •  

昨天已經示範過如何安裝Appium,今天就來實作如何利用Appium來寫Android的End to End Test(以下用e2e test)的第一步。在開始前可以先把Android Studio關掉,什麼?寫Appium不用Android Studio?是的,利用Appium寫e2e test的確不用Android Studio,還記得昨天說的寫Appium可以選擇任何有被官方支援的語法,也就是不會相依於被測試的行動裝置平台。

Appium的理念是開發一個獨立的測試程式,它透過Appium Server去操作Android APK,所以你可以不懂Android的語法,只需要懂Appium的語法就可以寫e2e test,當然背後還是靠它幫你轉成各平台的native testing framework去執行。因此很適合不懂Android SDK的人來寫測試的automation code。即使你是Android工程師,寫Appium也比寫Espresso簡單,學習曲線要快。
https://ithelp.ithome.com.tw/upload/images/20191009/20120975rUvolFg5gY.png

範例

在Appium的範例中,一樣是使用在Integration章節裡面舉的例子來做e2e的測試
https://ithelp.ithome.com.tw/upload/images/20191011/20120975MdoOi473VZ.png

Appium Inspector

在開始寫語法之前我們先來看Appium提供的一個非常好用的尋找UI元件在畫面上reference的工具Inspector,當我們打開Appium Server後,在右上方的第一個放大鏡圖示就是Inspector的Launcher。
https://ithelp.ithome.com.tw/upload/images/20191010/20120975ObL7BkSrs6.png

點擊後會出現config的面板,我們要把capabilites依次設定在左方的列表中。設定完成後它會自動形成一個Json config出現在右下方,這個Json config會用來launch application的session。完成Config後按start session的按鈕就可打開Inspector。
https://ithelp.ithome.com.tw/upload/images/20191010/20120975phYOEsNKo9.png

範例中的config介紹如下

  • platformName 測試平台,測試Android就填Android,iOS就填iOS
  • deviceName 填入手機或模擬器的名稱,可以利用adb devices去看
  • automationName 填入testing framework的名稱,Appium建議用UiAutomator2,也可用Espresso。
  • autoGrantPermissions 是否自動同意系統權限
  • app apk所在絕對路徑

{
  "platformName": "Android",
  "deviceName": "Pixel2",
  "automationName": "UiAutomator2",
  "autoGrantPermissions": true,
  "app": "/Users/danielchen/Desktop/app.apk"
}

進入Inspector後我們先看上方的選單,由左到右敘述如下
https://ithelp.ithome.com.tw/upload/images/20191010/20120975WZTTGtdbnt.png

  • Select Element
    • 點選後再點選左方面板的Screenshot就會在右方面板出現被點選View的相關資訊,為預設選項。
  • Swipe by coordinate
    • 點選兩個坐標後進行Swipe
  • Tap by cooridinate
    • 直接點選坐標
  • Back
    • 回上一個動作
  • Refresh screenshot 
    • 重新capture目前的screenshot
  • Start Recording
    • 錄製在inspector裡的動作,如果有用tap by coordinate時可以紀錄坐標
  • Search for element
    • 用手動輸入id,xpath等等的方式搜尋元件
  • Copy xml
    • copy App Source裡的xml
  • Quit
    • 離開inspector

進入Inspector後,基本上也就是幫我們打開apk來查找View的ID等等資訊,這樣我們就不用看source code來找ID了,如果今天你是QA或是Layout檔不是你建立的這個功能還蠻方便的。我們測試點擊Button後會到下一頁,我們要做的事就是把滑鼠移到左邊的Screenshot上面,Inspector就會自動幫我們把這個元件的所有資訊顯示在右方面板中。例如Button在右方的在Selected Element的面板中有顯示find by id及find by xpath,我們就可以利用這兩個資訊在Appium的語法中來控制元件。
https://ithelp.ithome.com.tw/upload/images/20191010/20120975spbWQ7cOl3.png

當我們點擊Button後來到下一頁ListActivity,我們點選RecyclerView的第一個item如下圖,在Selected Element面板中出現只有XPath的選項,這是因為在比較複雜且動態生成的UI元件中,Appium找不到對應的ID就會用XPath的方式來尋找,我們copy下來"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout[2]/android.widget.LinearLayout/androidx.recyclerview.widget.RecyclerView/android.widget.LinearLayout[0]”,是這一串落落長的元件階層,遇到這種情況我會建議可以利用上面講的search for element的功能來確認一下改變index是否能找到sibling這樣對於寫test code會比較靈活,我們打開search for element的面板選取XPath把剛剛的XPath修改一下.../android.widget.LinearLayout,把最後的LinearLayout[0]的索引拿掉進行尋找。
https://ithelp.ithome.com.tw/upload/images/20191010/201209754CsJ1gMsMH.png

最後找到了七個elements,證實我們可以利用XPath的索引功能來點擊任一個RecyclerView裡的元件,這對我們寫Appium的語法很有幫助。
https://ithelp.ithome.com.tw/upload/images/20191010/20120975ymX0uG5bxz.png

在點選Item後進入下一個DetailActivity
https://ithelp.ithome.com.tw/upload/images/20191010/201209751yjSJABZIQ.png

在這個Activity我一樣利用滑鼠點擊screenshot的View尋找出EditText,TextView和Button這些元件在Appium Inspector可以對應的搜尋方法後,就可以開始進入Appium語法了。
https://ithelp.ithome.com.tw/upload/images/20191010/20120975JA3r4rMboQ.png

結論

熟悉Inspector的操作對我們在測試很有幫助,因此在正式開始寫testing code前這可以說是必要技能,在實務上因為有Inspector這個Tool所以我也能同時寫公司的IOS版的e2e test,我只要有IOS的app folder,我同樣能利用Appium操作透過Inspector找到的元件而我不用去打開Xcode查找storyboard的相關資訊。
所以不管你的角色是Android Developer,IOS Developer或是QA Engineer都可以不用會寫對方的平台就進行完整的測試,這就是Appium的厲害的地方。下一章節會介紹如何在IntelliJ上整合Appium及JUnit撰寫e2e test。


上一篇
[Day 25] Mobile測試架構 Appium 介紹
下一篇
[Day 27] 利用Appium測試Android App (二)
系列文
從0開始,全方面自動化測試Android App30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言